package generalObjects;

import java.rmi.Remote;
import java.rmi.RemoteException;

import communicationModule.MessageObject;

import exceptions.NameTakenException;
import exceptions.NotLeaderException;

/**
 * Interface used for specifying the requirements of a client in the GCom
 * subsystem which uses Java RMI.
 * 
 */
public interface BaseClientContract extends Remote {

    public void send(MessageObject msg) throws RemoteException;

    public GroupInformation join(final BaseClientContract stub, String nick)
            throws RemoteException, NameTakenException, NotLeaderException;

    public void isAlive() throws RemoteException;

    public GroupView getVectorClockBaseline() throws RemoteException;
}
